其他
消息队列价值思考
往期文章回顾:一场HBase2.x的写入性能优化之旅
日志与消息队列
消息队列的应用价值
数据集成与系统解耦
异步处理与事件驱动
流量削峰
事务消息与分布式事务的最终一致
从历史看消息队列的价值演化
小米的消息队列产品Talos与EMQ
Talos/EMQ 与开源产品的区别
Talos与EMQ的区别
后续文章
参考文献
时常会思考消息队列的价值是什么?新人加入团队后该如何理解消息队列?又该如何理解小米的自研产品 Talos 和 EMQ?鉴于这些考虑,我把对消息队列的理解做一个简单总结,希望能帮助感兴趣的同学了解 Talos/EMQ 的价值和定位,以及它在企业架构中扮演着什么样的角色。
作者批注:思考手上的工作,找到它的价值和定位,就找到了工作的目标 — 努力将价值最大化
作者批注:本质上日志与消息队列都可以抽象成 Pub/Sub 的模式
作者批注:《日志:每个软件工程师都应该知道的有关实时数据的统一抽象》据说是史诗般必读文章
Data integration is making all the data an organization has available in all its services and systems.
数据集成即将一个组织所拥有的数据,使其在所有的服务和系统中都可用。
2)架构复杂交错,各个链路容易互相影响。比如一个业务数据写入 A 系统失败,一般会影响 B 系统的写入;
3)出现问题后很难定位,且容易丢失数据,数据恢复也变得困难
1)由于消息队列的解耦,架构复杂度大大降低,各系统间的数据同步不会互相影响(各系统无需知道彼此的存在);
2)由于消息队列的持久化,不易丢失数据,也可以在必要时进行数据重放;
3)由于所有数据都汇总到消息队列中,数据集成非常高效,可以快速接入新的数据系统而不影响存量架构
作者批注:做好消息队列和数据集成平台的重要性不言而喻,价值所在。
作者批注:能够异步处理的逻辑一般是不必在当时那个时间点拿到结果,有个通知就行
1)简化业务逻辑,更快的返回结果,提升响应效率和系统吞吐,改善用户体验;
2)即使异步逻辑的邮件系统出问题,也不会影响注册流程,降低系统耦合度。
作者批注:大型分布式架构的数据总线、微服务中隔离直连的异步调用,Serverless 的事件驱动,处处都有消息中间件的身影,可谓价值所在
消息队列中的事务是指 “业务执行本地事务” 与 “消息发送到消息队列” 的原子性。事务消息跟普通消息的区别是,在事务提交前,这个消息对消费者来说是不可见的;基于事务消息,消息队列最终解决的是生产者与消费者在分布式事务场景中的一致性问题。
价值关键词:调用松耦合、异步处理
价值关键词:数据管道、数据集成、实时计算
价值关键词:平台化、容器化、存储计算分离架构
1.Talos/EMQ 与开源产品 Kafka/ActiveMQ/RocketMQ 等有什么区别?
2.Talos 和 EMQ 之间又有什么区别?
Talos 与 EMQ 立项的目标便是服务于小米内部业务和生态链公司,对内打通 LADP,服务各部门业务,对外打通小米账号,向生态链公司输出中间件价值。针对企业深度定制的多租户管理以及一些平台化特性是它们与开源产品在落地点上的主要不同。
Talos 和 EMQ 架构上皆是存储计算分离的设计,从架构理念上相对领先于业界同时期的开源产品,存储计算分离的好处有很多,主要两个方面:
计算层无状态:管理、调度都变得简单;天然支持扩展,扩容无感知;具有高弹性的容错机制(相比计算层无状态的灵活,存储计算耦合的架构,Failover 非常麻烦,一般需要复杂的选举算法,正常服务前需保证数据同步); 存储层更加专注:只需要做好数据存储功能即可,而存储系统相对比较成熟,比如 HDFS / HBase,借助它们的力量,间接降低了系统复杂度;
强调消息的有序,消费下游一般关注消息顺序 强调消费的独占,Consumer 是跟 Partition 强绑定的 消息的读写一般是 Batch 进行,batch ack,偏重吞吐的优化 消息持久化保存,支持消息回溯重放 典型场景:数据集成下的系统解耦;数据收集 + 后端计算,这也是 Talos 主要的应用场景
采用无序的方式消费,消费下游一般不关心消息排序 采用共享的方式消费,可以通过增加 Consumer 数量来增加并发度 对于一条消息,多个 Consumer 中只有一个(可能是任何一个)能消费到这条消息 能够跟踪单条消息状态,可以随机 ACK 一条消息,偏重延迟优化 一般情况下,消息消费后就会被标记删除 典型场景:异步调用,事件通知,比如上面提到的注册时异步的发送邮件、下单时异步的发送短信,这些都是 EMQ 的应用场景
《消息队列价值思考》 《万亿级消息背后–小米在消息队列的实践》 《Talos 负载均衡实践》 《Talos GC 优化历程》 《Talos 的一致性模型》 《Talos 事务消息设计》 《EMQ 架构设计实践》 《Talos 快速收敛的 Consumer-Rebalance 机制》 《Talos Replication 设计与应用》 《消息队列的存储设计对比》 《消息队列设计的难点与取舍》